﻿using System;
using System.Collections.Generic;
using System.Data;
using Esint.Common.Model;
using Esint.JudicialAuction.Model;
using Esint.JudicialAuction.Model.Schedule;

namespace Esint.JudicialAuction.IDAL
{
    /// <summary>
    /// 模块名称： 数据访问接口层
    /// 作    者：谷明
    /// 生成日期：2020年03月29日
    /// 生成模板: Esint.Template.IDAL.IDAL_01 版
    /// 修改说明：
    /// </summary>
    public partial interface ISchedule_ShiftsData:IBaseData
    {
        /// <summary>
        /// 根据查询条件查询排班记录
        /// </summary>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <param name="place"></param>
        /// <param name="workType"></param>
        /// <returns></returns>
        List<Schedule_ShiftsInfo> GetScheduleList(string startTime, string endTime, string place, string workType);

        /// <summary>
        /// 保存一次工作列表
        /// </summary>
        /// <param name="onceWorks"></param>
        void SaveOnceWorkList(List<OnceWork> onceWorks);

        /// <summary>
        /// 保存排班结果的方法
        /// </summary>
        /// <param name="ScheduleList"></param>
        /// <param name="UserList"></param>
        void SaveScheduleAndUser(OnceWork onceWork);

        /// <summary>
        /// 取在时间范围内的排班最大日期和最小日期
        /// </summary>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        List<DateTime> GetMaxAndMinRecord(string startTime, string endTime);

        /// <summary>
        /// 获得用户个人的分页排班列表
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        ReturnTable GetScheduleListByUserId(string userId, int pageIndex, int pageSize, string startTime, string endTime);

        /// <summary>
        /// 检查换班合法性，并返回不合法的记录
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="targetWork"></param>
        List<Schedule_ShiftsInfo> CheckSwitchTargetRight(string userId, OnceWork targetWork);

        /// <summary>
        /// 执行换班操作
        /// </summary>
        /// <param name="switchOnceWork"></param>
        void SaveSwitchWork(SwitchOnceWork switchOnceWork);

        /// <summary>
        /// 删除一个时间段内的排班记录
        /// </summary>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        void DeleteScheduleByTimeSpan(string startTime, string endTime, string place);
    }
}
